package 牛客算法篇;

/**
 * Created with IntelliJ IEDA.
 * Description:
 * User:86186
 * Date:2024-02-28
 * Time:15:58
 */

/**
 *
 牛客算法篇:BM19 寻找峰值
 给定一个长度为n的数组nums，请你找到峰值并返回其索引。数组可能包含多个峰值，在这种情况下，返回任何一个所在位置即可。
 1.峰值元素是指其值严格大于左右相邻值的元素。严格大于即不能有等于
 2.假设 nums[-1] = nums[n] = −∞−∞
 3.对于所有有效的 i 都有 nums[i] != nums[i + 1]
 4.你可以使用O(logN)的时间复杂度实现此问题吗？
 数据范围：
 1≤nums.length≤2×105 1≤nums.length≤2×105
 −231<=nums[i]<=231−1−231<=nums[i]<=231−1
 如输入[2,4,1,2,7,8,4]时，会形成两个山峰，一个是索引为1，峰值为4的山峰，另一个是索引为5，峰值为8的山峰，如下图所示：
 示例1
 输入：
 [2,4,1,2,7,8,4]
 返回值：
 1
 说明：
 4和8都是峰值元素，返回4的索引1或者8的索引5都可以
 */
public class findPeakElement {
    public int findPeakElement (int[] nums) {
        // write code here
        int cur = 1,pre = 0;
        int len = nums.length;
        if(len < 2) return 0;
        int n = 0;
        while(cur < len){
            n = nums[cur] - nums[pre];
            if(n < 0){
                return nums[cur] > nums[pre] ? cur: pre;
            }
            cur++;
            pre++;
        }
        return pre;
    }
}
